//
//  YKHTTPServiceConfig.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/6/23.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * HTTP服务环境枚举
 */
typedef NS_ENUM(NSInteger, YKHTTPEnvironment) {
    YKHTTPEnvironmentProduction = 0,  // 生产环境
    YKHTTPEnvironmentTest = 1         // 测试环境
};

/**
 * HTTP服务配置类
 * 管理域名、签名密钥、公共参数等配置
 */
@interface YKHTTPServiceConfig : NSObject

#pragma mark - 单例

/**
 * 获取单例实例
 */
+ (instancetype)sharedConfig;

#pragma mark - 环境配置

/**
 * 当前环境
 */
@property (nonatomic, assign) YKHTTPEnvironment environment;

/**
 * 生产环境域名
 */
@property (nonatomic, copy) NSString *productionBaseURL;

/**
 * 测试环境域名
 */
@property (nonatomic, copy) NSString *testBaseURL;

/**
 * 获取当前环境的基础URL
 */
@property (nonatomic, readonly) NSString *currentBaseURL;

#pragma mark - 签名配置

/**
 * 签名密钥
 */
@property (nonatomic, copy) NSString *signKey;

/**
 * 是否启用签名验证
 */
@property (nonatomic, assign) BOOL enableSignature;

#pragma mark - 公共参数配置

/**
 * 游戏版本号
 */
@property (nonatomic, copy) NSString *gameVersion;

/**
 * SDK版本号
 */
@property (nonatomic, copy) NSString *sdkVersion;

/**
 * 时区
 */
@property (nonatomic, copy) NSString *timezone;

#pragma mark - 网络配置

/**
 * 请求超时时间（默认30秒）
 */
@property (nonatomic, assign) NSTimeInterval timeoutInterval;

/**
 * 是否启用日志
 */
@property (nonatomic, assign) BOOL enableLogging;

/**
 * 最大重试次数
 */
@property (nonatomic, assign) NSInteger maxRetryCount;

#pragma mark - 配置方法

/**
 * 配置HTTP服务
 * @param productionURL 生产环境URL
 * @param testURL 测试环境URL
 * @param signKey 签名密钥
 * @param gameVersion 游戏版本
 * @param sdkVersion SDK版本
 */
- (void)configureWithProductionURL:(NSString *)productionURL
                           testURL:(NSString *)testURL
                           signKey:(NSString *)signKey
                       gameVersion:(NSString *)gameVersion
                        sdkVersion:(NSString *)sdkVersion;

/**
 * 切换到生产环境
 */
- (void)switchToProduction;

/**
 * 切换到测试环境
 */
- (void)switchToTest;

/**
 * 获取当前环境描述
 */
- (NSString *)currentEnvironmentDescription;

@end

NS_ASSUME_NONNULL_END